package com.bigdata.spark.core.rdd.operator.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * @author : ranzlupup
 * @date : 2023/3/1 16:14
 */
object RDD_Transform_groupBy {
    def main(args: Array[String]): Unit = {
        val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
        val sparkContext: SparkContext = new SparkContext(sparkConf)
        val RDD: RDD[Int] = sparkContext.makeRDD(List(1, 2, 3, 4, 5, 6, 7, 8))
        val RDD2: RDD[Int] = sparkContext.makeRDD(List(1, 2, 3, 4, 5, 6, 7, 8),2)

        // TODO RDD转换算子
        //      Value类型
        //      groupBy
        // 将数据根据指定的规则进行分组, 分区默认不变，
        // 但是数据会被打乱重新组合，我们将这样 的操作称之为 shuffle。
        // 极限情况下，数据可能被分在同一个分区中
        // 分区和分组没有必然的关系

        RDD.groupBy(
            num => {
                num % 2 == 0
            }
        ).collect().foreach(println)

        println("---------------")

        RDD2.groupBy(
            num => {
                num % 2 == 0
            }
        ).collect().foreach(println)

        sparkContext.stop()
    }
}
